﻿using System;
using System.Collections.Generic;
using System.Data;
using AccesoData.Interfaces;
using Entidades;
using MySql.Data.MySqlClient;

namespace AccesoData.DAOMySql
{
    public class DAODetalleEstimadoMySql: ConexionBaseDatos,IDAODetalleEstimado
    {
        /// <summary>
        /// agrega los datos del detalle estimado de la perdida
        /// </summary>
        /// <param name="detalle"></param>
        /// <param name="siniestro"></param>
        /// <returns></returns>
        public int AgregarDetalle(DetalleEstimado detalle, Entidad siniestro)
        {
            try
            {
                MySqlCommand comando = new MySqlCommand();
                comando.Connection = Conexion();
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "AgregarDetalleEstimado";


                comando.Parameters.AddWithValue("@monto", detalle.Monto);
                comando.Parameters.AddWithValue("@idSiniestro", siniestro.Id);
                comando.Parameters.AddWithValue("@descripcion", detalle.Descripcion);

                comando.Parameters["@monto"].Direction = ParameterDirection.Input;
                comando.Parameters["@idSiniestro"].Direction = ParameterDirection.Input;
                comando.Parameters["@descripcion"].Direction = ParameterDirection.Input;

                int id = 0;
                MySqlDataReader reader = comando.ExecuteReader();
                while (reader.Read())
                {
                    id = (reader[0] == DBNull.Value) ? 0 : (int)reader[0];
                }

                CerrarConexion();
                return id;
            }
            catch (Exception)
            {

                return -1;
            }
        }

        /// <summary>
        /// Obtiene la lista del detalle estimado de la perdida del siniestro
        /// </summary>
        /// <param name="siniestro"></param>
        /// <returns></returns>
        public List<DetalleEstimado> ObtenerDetalleEstimado(Entidad siniestro)
        {
            try
            {
                MySqlCommand comando = new MySqlCommand();
                List<DetalleEstimado> retorno = new List<DetalleEstimado>();

                comando.Connection = Conexion();
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "ObtenerDetalleEstimado";
                comando.Parameters.AddWithValue("@idSiniestro", siniestro.Id);
                comando.Parameters["@idSiniestro"].Direction = ParameterDirection.Input;
                MySqlDataReader reader = comando.ExecuteReader();

                while (reader.Read())
                {
                    DetalleEstimado miDetalle = FabricaEntidades.ObtenerDetalleEstimado();
                    miDetalle.Id = (int) reader[0];
                    miDetalle.Descripcion = (string) reader[1];
                    miDetalle.Monto = (float)reader[2];
                    retorno.Add(miDetalle);
                }

                reader.Close();
                CerrarConexion();
                return retorno;

            }
            catch (Exception)
            {

                return null;
            }
        }

        /// <summary>
        /// elimina un detalle estimado de la base de datos
        /// </summary>
        /// <param name="detalle"></param>
        /// <returns></returns>
        public bool EliminarDetalle(DetalleEstimado detalle)
        {
            try
            {
                MySqlCommand comando = new MySqlCommand();

                comando.Connection = Conexion();
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "EliminarDetalle";
                comando.Parameters.AddWithValue("@idDetalle", detalle.Id);
                comando.Parameters["@idDetalle"].Direction = ParameterDirection.Input;
                comando.ExecuteNonQuery();
                
                CerrarConexion();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        /// <summary>
        /// edita los datos del detalle
        /// </summary>
        /// <param name="detalle"></param>
        /// <returns></returns>
        public bool EditarDetalle(DetalleEstimado detalle)
        {
            try
            {
                MySqlCommand comando = new MySqlCommand();
                comando.Connection = Conexion();
                comando.CommandType = CommandType.StoredProcedure;
                comando.CommandText = "EditarDetalleEstimado";


                comando.Parameters.AddWithValue("@montoN", detalle.Monto);
                comando.Parameters.AddWithValue("@idDetalle",detalle.Id);
                comando.Parameters.AddWithValue("@descripcionN", detalle.Descripcion);

                comando.Parameters["@montoN"].Direction = ParameterDirection.Input;
                comando.Parameters["@idDetalle"].Direction = ParameterDirection.Input;
                comando.Parameters["@descripcionN"].Direction = ParameterDirection.Input;

                comando.ExecuteNonQuery();
                CerrarConexion();
                return true;
            }
            catch (Exception)
            {

                return false;
            }
        }
    }
}
